/**
 * This file is part of 1genia trampoline
 * Copyright (C) 2007 1genia (contact@1genia.com)
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; version 3 of the License. 
 *
 * This library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details. 
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; see the file COPYING.TXT.  If not,
 * write to the Free Software Foundation, Inc., 51 Franklin Street,
 * Fifth Floor, Boston, MA 02110-1301, USA. 
 **/
package com.genia.toolbox.uml_generator.transformer;


import org.springframework.util.StringUtils;
import org.w3c.dom.Element;

import com.genia.toolbox.uml_generator.Constants;
import com.genia.toolbox.uml_generator.bean.ModelGeneratorContext;
import com.genia.toolbox.uml_generator.manager.ModelDecorator;
import com.genia.toolbox.uml_generator.model.AbstractClassModel;
import com.genia.toolbox.uml_generator.model.impl.InterfaceModel;

/**
 * this class handle the input of nodes from xmi to model.
 */
public class InterfaceInputHandler
    extends AbstractInputHandler<Object>
{

  /**
   * the {@link ModelDecorator} to use.
   */
  private ModelDecorator modelDecorator;



  /**
   * the actual method that parse the current {@link Element}.
   * @param context
   *          the generation context
   * @param firstPass
   *          wether it is the first or second pass
   * @param element
   *          the element to parse
   * @param parent
   *          the generated parent model
   */
  public void processContent(final ModelGeneratorContext context, final boolean firstPass, final Element element, final Object parent)
  {
    AbstractClassModel model = null;

    if (firstPass) {
      model = new InterfaceModel();
      fillCommonValue(context, element, model);
      context.addClassModel(model);

      if (!model.hasStereotype(Constants.IGNORE_STEREOTYPE)) {
        if (!StringUtils.hasText(model.getComment())) {
          context.getErrors().add("Class " + model.getQualifiedName() + " must have a comment.");
        }
      }
    }
    else {
      model = (AbstractClassModel) context.getObject(element.getAttribute("xmi.id"));

      // operation
      handleOperation(context, element, model);

      // inheritance
      handleAbstraction(context, element, model);
    }

  }



  /**
   * getter for the modelDecorator property.
   * 
   * @return the modelDecorator
   */
  public ModelDecorator getModelDecorator()
  {
    return modelDecorator;
  }



  /**
   * setter for the modelDecorator property.
   * 
   * @param modelDecorator
   *          the modelDecorator to set
   */
  public void setModelDecorator(ModelDecorator modelDecorator)
  {
    this.modelDecorator = modelDecorator;
  }

}
